home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
X11
/
xpaint-2.1.1
/
image.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-03
|
3KB
|
93 lines
#ifndef __IMAGE_H__
#define __IMAGE_H__
/* +-------------------------------------------------------------------+ */
/* | Copyright (C) 1993, David Koblas (koblas@netcom.com) | */
/* | | */
/* | Permission to use, copy, modify, and to distribute this software | */
/* | and its documentation for any purpose is hereby granted without | */
/* | fee, provided that the above copyright notice appear in all | */
/* | copies and that both that copyright notice and this permission | */
/* | notice appear in supporting documentation. There is no | */
/* | representations about the suitability of this software for | */
/* | any purpose. this software is provided "as is" without express | */
/* | or implied warranty. | */
/* | | */
/* +-------------------------------------------------------------------+ */
typedef struct {
int refCount; /* reference count */
/*
** Special notes:
** if the image isBW then there will be a two entry
** colormap BLACK == 0, WHITE == 1
** if the image isGrey, then the colormap is 256 entries
** BLACK == 0 .. WHITE == 255
*/
int isGrey, isBW; /* simple indicator flags GreyScale, Black & White */
/*
** number of bytes per pixel (3 for RGB, 2 for 0..256+ cmap, 1 for 0..256 cmap)
*/
int scale;
/*
** Colormap entries
** rgb rgb rgb [1..size]
*/
int cmapPacked; /* Boolean, is the colormap packed
down to just the used colors */
int cmapSize; /* number of colors in colormap == 0 if no colormap */
unsigned char *cmapData;
/*
** Image data
** either rgb rgb rgb
** or idx idx idx
**
** if image has colormap, and the size > 256, then
** data is pointers to unsigned shorts.
*/
int width, height; /* width, height of image */
unsigned char *data;
unsigned char *maskData;
/*
** These values are here because the XPM calls are TOO dependant
** on X Windows. They are not, and should not, be used by anything
** else.
*/
unsigned long sourcePixmap;
unsigned long sourceColormap;
unsigned long sourceMask;
} Image;
#define ImagePixel(image, x, y) \
(((image)->cmapSize == 0) \
? &((image)->data[(y * (image)->width + x) * 3]) \
: (((image)->cmapSize > 256) \
? &((image)->cmapData[((unsigned short *)(image)->data) \
[y * (image)->width + x] * 3]) \
: &((image)->cmapData[(image)->data[y * (image)->width + x] * 3])))
#define ImageSetCmap(image, index, r, g, b) do { \
image->cmapData[(index) * 3 + 0] = r; \
image->cmapData[(index) * 3 + 1] = g; \
image->cmapData[(index) * 3 + 2] = b; \
} while (0)
Image *ImageNew(int, int);
Image *ImageNewGrey(int, int);
Image *ImageNewBW(int, int);
Image *ImageNewCmap(int, int, int);
Image *ImageCompress(Image *, int);
void ImageDelete(Image *);
void ImakeMakeMask(Image *);
#ifdef _XtIntrinsic_h
Image *PixmapToImage(Widget, Pixmap, Colormap);
Boolean ImageToPixmap(Image *, Widget, Pixmap*, Colormap*);
Boolean ImageToPixmapCmap(Image *, Widget, Pixmap*, Colormap);
Pixmap ImageMaskToPixmap(Widget, Image *);
void PixmapToImageMask(Widget, Image *, Pixmap);
#endif
#endif /* __IMAGE_H__ */